﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace QuanLyGaRaOTo.HieuXe
{
    public partial class Presentation : Form
    {
        private DataTable dtHieuXe = new DataTable();

        public Presentation()
        {
            InitializeComponent();
        }

        private void loadHieuXe()
        {
            BUS bus = new BUS();
            dtHieuXe = new DataTable();
            dtHieuXe = bus.read();
            dgv.DataSource = dtHieuXe.DefaultView;
        }

        private void Presentation_Load(object sender, EventArgs e)
        {
            loadHieuXe();
        }

        private void cbTenHieuXe_CheckedChanged(object sender, EventArgs e)
        {
            txtTenHieuXe.Enabled = cbTenHieuXe.Checked;
        }

        private void btnTim_Click(object sender, EventArgs e)
        {
            string filter = "";

            if (cbTenHieuXe.Checked)
                filter = string.Format("TENHIEUXE like '%{0}%'", txtTenHieuXe.Text);

            DataView dv = new DataView(dtHieuXe);
            dv.RowFilter = filter;
            dgv.DataSource = dv;
        }
               
        private void tsbEdit_Click(object sender, EventArgs e)
        {
            btnStatus(false);
        }

        private void insert(DataRow row)
        {
            DTO dto = new DTO();
            dto.TenHieuXe = row["TenHieuXe"].ToString();
            BUS bus = new BUS();
            int i = bus.insert(dto);

            if (i == -1)
            {
                MessageBox.Show("Đã xảy ra lỗi trong quá trình thêm dòng dữ liệu mới!!!", "Thêm", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtHieuXe.RejectChanges();
                btnStatus(true);
            }
            else
                row["MaHieuXe"] = i;
        }

        private void delete(DataRow row)
        {
            DTO dto = new DTO();
            dto.MaHieuXe = Convert.ToInt32(row["MaHieuXe", DataRowVersion.Original]);
            BUS bus = new BUS();

            if (!bus.delete(dto))
            {
                MessageBox.Show("Đã xảy ra lỗi trong quá trình xóa dòng dữ liệu mới!!!", "Xóa", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtHieuXe.RejectChanges();
                btnStatus(true);
            }
        }

        private void update(DataRow row)
        {
            DTO dto = new DTO();
            dto.MaHieuXe = Convert.ToInt32(row["MaHieuXe"]);
            dto.TenHieuXe = row["TenHieuXe"].ToString();           
            BUS bus = new BUS();

            if (!bus.update(dto))
            {
                MessageBox.Show("Đã xảy ra lỗi trong quá trình cập nhật dòng dữ liệu mới!!!", "Cập nhật", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtHieuXe.RejectChanges();
                btnStatus(true);
            }
        }

        private void tsbSave_Click(object sender, EventArgs e)
        {
            foreach (DataRow row in dtHieuXe.Rows)
                switch (row.RowState)
                {
                    case DataRowState.Added:
                        insert(row);
                        break;

                    case DataRowState.Modified:
                        update(row);
                        break;

                    case DataRowState.Deleted:
                        delete(row); ;
                        break;

                    default: break;
                }

            dtHieuXe.AcceptChanges();
            btnStatus(true);
        }

        private void tsbCancel_Click(object sender, EventArgs e)
        {
            dtHieuXe.RejectChanges();
            btnStatus(true);
        }

        private void tsbExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnStatus(Boolean status)
        {
            try
            {
                grTraCuu.Enabled = status;
                dgv.ReadOnly = status;
                dgv.AllowUserToDeleteRows = !status;

                tsbEdit.Enabled = tsbReset.Enabled = status;
                tsbSave.Enabled = tsbCancel.Enabled = !status;
                dgv.AllowUserToAddRows = !status;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void tsbReset_Click(object sender, EventArgs e)
        {
            dgv.DataSource = dtHieuXe.DefaultView;
        }        
    }
}
